/*******************************************************************************
 * 版权：北京润尼尔网络科技有限公司，保留所有版权<br>
 * 版本：v1.0.0<br>
 * 文件：CommandMove.js<br>
 * 日期：2016年9月20日<br>
 * 作者: 王志远<br>
 * 功能：添加命令<br>
 * 
 * 修改记录：<br>
 * 日期 描述 更新功能<br>
 ******************************************************************************/

window.makeNamespace(window,"Rainier.UI.V2");

/**
 * 类型名称：Rainier.UI.V2.CommandMove<br>
 * 类型功能：添加元件命令<br>
 */
Rainier.UI.V2.CommandMove = draw2d.command.Command.extend({
	
	NAME : "Rainier.UI.V2.CommandMove",
	
	/**
	 * 函数名称：Rainier.UI.V2.CommandMove.init<br>
	 * 函数功能：构造函数<br>
	 * 异常信息：无<br>
	 */
	init : function(editPart){
		this._super();
		this.editPart = editPart;
		this.model  = this.editPart.getModel();
		this.figure = this.editPart.getFigure();
        this.oldX   = this.figure.getX();
        this.oldY   = this.figure.getY();
	},
	
	/**
	 * 函数名称：Rainier.UI.V2.CommandMove.setStartPosition<br>
	 * 函数功能：设置起始位置<br>
	 * 参数输入：x:Number<br>
	 * 参数输入：y:Number<br>
	 * 函数返回：无<br>
	 * 异常信息：<br>
	 */
    setStartPosition:function( x,  y){
       this.oldX = x;
       this.oldY = y;
    },
    
	/**
	 * 函数名称：Rainier.UI.V2.CommandMove.setPosition<br>
	 * 函数功能：设置当前位置<br>
	 * 参数输入：x:Number<br>
	 * 参数输入：y:Number<br>
	 * 函数返回：无<br>
	 * 异常信息：<br>
	 */
    setPosition:function( x,  y){
       this.newX = x;
       this.newY = y;
       
	   	if(this.newX % 9 !== 0){
			this.newX = this.newX - this.newX % 9;
		}
		if(this.newY % 9 !== 0){
			this.newY = this.newY - this.newY % 9;
		}
    },

    /**
	 * 函数名称：Rainier.UI.V2.CommandMove.canExecute<br>
	 * 函数功能：能否执行<br>
	 * 函数返回：Boolean<br>
	 * 异常信息：无<br>
	 */
    canExecute:function(){
      return this.newX!=this.oldX || this.newY!=this.oldY;
    },
    
    /**
	 * 函数名称：Rainier.UI.V2.CommandMove.execute<br>
	 * 函数功能：执行命令<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
    execute:function(){
       this.redo();
    },
    
    /**
	 * 函数名称：Rainier.UI.V2.CommandMove.undo<br>
	 * 函数功能：取消操作命令<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
    undo:function(){
    	this.model.setPosition(this.oldX,this.oldY,false);
    },

    /**
	 * 函数名称：Rainier.UI.V2.CommandMove.redo<br>
	 * 函数功能：重做命令<br>
	 * 函数返回：无<br>
	 * 异常信息：无<br>
	 */
    redo:function(){
        this.model.setPosition(this.newX,this.newY,false);
    }
});

